Data compression is widely used in a variety of applications to reduce consumption of data storage space, transmission bandwidth, or both. Example applications of data compression include visible or audible media data coding, such as digital video, image, speech, and audio coding. Digital video coding, for example, is used in a wide range of devices, including digital televisions, digital direct broadcast systems, wireless communication devices, personal digital assistants (PDAs), laptop or desktop computers, tablet computers, digital cameras, digital recording devices, video gaming devices, cellular or satellite radio telephones, or the like. Digital video devices implement video compression techniques in accordance with standards, such as an MPEG-2 standard, an MPEG-4 standard, an H.264/MPEG-4 Advanced Video Coding (AVC) standard, or the emerging High Efficiency Video Coding (HEVC) standard (which is sometimes referred to as the emerging H.265 standard) to transmit and receive digital video more efficiently.
Video compression techniques may perform spatial prediction, motion estimation and motion compensation to reduce or remove redundancy inherent in video data. In particular, intra-coding relies on spatial prediction to reduce or remove spatial redundancy in video within a given video frame. Inter-coding relies on temporal prediction to reduce or remove temporal redundancy in video within adjacent frames. For inter-coding, a video encoder performs motion estimation to track the movement of matching units (which may be referred to as blocks in various video coding standards, such as the H.264/MPEG-4 AVC standard) between two or more adjacent frames. Motion estimation generates motion vectors, which indicate the displacement of units of a current frame relative to corresponding units in one or more reference frames. Motion compensation uses the motion vector to generate prediction data from a reference frame. After motion compensation, residual data is formed by subtracting the prediction data from the original unit.
A video encoder then applies a transform followed by quantization and lossless statistical coding processes to further reduce the bit rate of the residual data produced by the video coding process. In some instances, the applied transform comprises a discrete cosine transform (DCT). The DCT coefficients produced from applying a DCT to the residual data then undergo quantization and lossless statistical coding processes (commonly known as “entropy coding” processes) to generate a bitstream. Examples of statistical coding processes include context-adaptive variable length coding (CAVLC) or context-adaptive binary arithmetic coding (CABAC). A video decoder receives the encoded bitstream and performs lossless decoding to decompress the DCT coefficients, which the video decoder then transforms back into the spatial domain through application of one or more inverse DCTs (IDCTs) to form residual data for each of the units. Using the residual data and motion information, the video decoder reconstructs the encoded video.